其他
Subdev分享|Substrate背后的密码学选择
Substrate中的密码学算法一览
sha2 keccak blake2 xxhash
ed25519 sr255519 secp256k1
SS58
哈希函数 (Hash function)
sha2 sha2_256 keccak keccak_256 blake2 blake2_128 blake2_256 blake2_512 xxhash (twox_hash) twox_64 twox_128 twox_256
哈希函数介绍
任意长度消息计算出的哈希值都是固定长度的 拿SHA-256来说,无论是16字节的用户密码,5M的图像,512G的U盘中的所有文件,还是1TB的硬盘文件,计算出的哈希值永远是256比特(32字节) 能够快速计算出哈希值 消息不同哈希值也不同 单向性
MD5不安全,不推荐使用。 SHA-1 2005年强抗碰撞性被王小云团队攻破,除了用于对过去生成的哈希值进行校验,不应该用于新的用途。 SHA-2(SHA-256,SHA-384,SHA-512)是安全的。 SHA-3(也叫Keccak [kɛtʃak])是安全的。
SHA-2(SHA-256,SHA-384,SHA-512)
SHA-3(Keccak)
2007年11月,开始公开征集 2008年10月,征集到64个算法,其中51个进入到第一轮 2009年7月,14个算法进入到第二轮 2010年12月,5个算法进入到第三轮
2012年10月,Keccak算法被最终确定为SHA-3标准
Blake2b
blake2_128
blake2_256
blake2_512
xxHash
twox_64 twox_128 twox_256
秘钥对和签名算法
基于椭圆曲线的公钥密码(也就是秘钥对) 基于椭圆曲线的数字签名(ECDSA,Elliptic Curve Digital Signature Algorithm) 基于椭圆曲线的秘钥交换
ed25519 sr255519 secp256k1
椭圆曲线基础
几种不同的椭圆曲线
sec:SECG标准 p:曲线坐标在素数域 256:素数是256位长 k :是一种 Koblitz 曲线 1:是第一个标准中该类型的曲线
使用椭圆曲线进行签名
公钥A 随机数k
计算随机数 r = H(k, M)。其中H是哈希函数,k是上面得到的随机数,M是消息。 计算随机点 R = rG。其中G是椭圆曲线上被选定的一个点,每个椭圆曲线都有这个预设值。通过前面的知识我们可以知道R也在椭圆曲线上。 计算签名 s = (r + H(R, A, M) x) mod p。其中p是一个很大的质数,x是对应公钥A的私钥,mod p 表示前面得到的值对p进行模的运算。
公钥A 签名 (R, s) 消息M
Ed25519签名算法
sr25519签名算法
secp256k1
从私钥生成公钥 给消息签名 验证签名 从签名消息中恢复出公钥 秘密的分享(Shared secrets,不确定是啥东西)
地址格式
00000000b..00110000b (0..48): Account/address identifiers on networks: 00000000b (0) Polkadot Live (SS58 checksum preimage) 00000001b (1) Polkadot Live (AccountId checksum preimage) 00000010b (2) Polkadot Canary (SS58 checksum preimage) 00000011b (3) Polkadot Canary (AccountId checksum preimage) 00010000b (16) Kulupu (SS58 checksum preimage) 00010001b (17) Kulupu (Reserved) 00010100b (20) Dothereum (SS58 checksum preimage) 00010101b (21) Dothereum (AccountId checksum preimage) 00101010b (42) Generic Substrate wildcard (SS58 checksum preimage) 00101011b (43) Generic Substrate wildcard (AccountId checksum preimage) 00110000b..01000000b (48..64): Bare public keys of primary cryptography 00110000b (48) Schnorr_Ristretto 25519 (“S_R 25519”) key 00110001b (49) Edwards Ed25519 key 00110010b (50) ECDSA SECP256k1 key 01000000b..11111111b (64-255) Reserved for future address format extensions.
总结
参考资料
https://blake2.net/ https://en.wikipedia.org/wiki/BLAKE_(hash_function)#BLAKE2 https://zh.wikipedia.org/wiki/BLAKE https://zhuanlan.zhihu.com/p/28563960
https://zh.wikipedia.org/wiki/SHA%E5%AE%B6%E6%97%8F https://en.wikipedia.org/wiki/SHA-2 https://zh.wikipedia.org/wiki/SHA-2 https://csrc.nist.gov/projects/hash-functions/sha-3-project
https://wiki.polkadot.network/docs/en/learn-cryptography https://zhuanlan.zhihu.com/p/84322255 https://research.web3.foundation/en/latest/polkadot/keys/ https://github.com/paritytech/substrate/wiki/External-Address-Format-(SS58)
https://andrea.corbellini.name/2015/05/17/elliptic-curve-cryptography-a-gentle-introduction/ http://suntus.github.io/2019/05/31/ECC%E7%AE%97%E6%B3%95/ https://hackernoon.com/what-is-the-math-behind-elliptic-curve-cryptography-f61b25253da3
https://blog.mozilla.org/warner/2011/11/29/ed25519-keys/ https://en.wikipedia.org/wiki/Curve25519 https://en.wikipedia.org/wiki/Twisted_Edwards_curve https://webencrypt.org/twistededwardscurve/ http://netinfo-security.org/article/2017/1671-1122-0-9-122.html https://en.wikipedia.org/wiki/EdDSA#Ed25519 https://zhuanlan.zhihu.com/p/44243140 https://zhuanlan.zhihu.com/p/76783431 https://tiannian.me/2018/12/28/cryptography/ed25519/ https://www.getmonero.org/2017/05/17/disclosure-of-a-major-bug-in-cryptonote-based-currencies.html https://tools.ietf.org/html/rfc7748 decaf: https://eprint.iacr.org/2015/673.pdf Ristretto: https://ristretto.group/why_ristretto.html https://doc.dalek.rs/curve25519_dalek/ristretto/index.html
https://www.oreilly.com/library/view/mastering-bitcoin-2nd/9781491954379/ch04.html https://medium.com/polkadot-network/kusama-cc-2-prepos-a0ce785bb629 https://www.johndcook.com/blog/2018/08/21/a-tale-of-two-elliptic-curves/ https://www.johndcook.com/blog/2018/08/14/bitcoin-elliptic-curves/ https://zh.wikipedia.org/wiki/%E6%A4%AD%E5%9C%86%E6%9B%B2%E7%BA%BF%E5%AF%86%E7%A0%81%E5%AD%A6 https://en.bitcoin.it/wiki/Secp256k1 https://www.ietf.org/rfc/rfc5480.txt https://learnblockchain.cn/books/geth/part3/sign-and-valid.html https://crypto.stackexchange.com/questions/58506/what-is-the-curve-type-of-secp256k1
活动预告
更多阅读:
▎Subdev周记 |Substrate最吸引开发者们的四大原因
▎全球第一门 Substrate 开发课第3期入围学员名单!
Modified on